#let project(title: "", course: "", authors: (), teacher: "", body) = {
  set text(
    font: "Source Han Serif",
    lang: "zh",
    region: "cn",
  )
  set par(justify: true)
  
  set heading(
    numbering: (..args) => {
      let nums = args.pos()
      if nums.len() == 1 {
        return numbering("一、", ..nums)
      } else if nums.len() == 2 {
        return numbering("1.", nums.at(1))
      } else if nums.len() == 3 {
        return numbering("(1)", nums.at(2))
      } else if nums.len() == 4 {
        return numbering("a.", nums.at(3))
      }
    },
  )
  set page(
    numbering: "1",
    number-align: center,
  )
  counter(page).update(1)
  
  align(center)[
    #text(size: 22pt, weight: "semibold", font: "Source Han Sans")[
      北京邮电大学计算机学院
      
      软件工程专业
      
      #underline("2023-2024") 学年第#underline(" 2 ")学期实验报告
    ]
    
    #v(8em)
    #set text(
      14pt,
      weight: "semibold",
    )
    
    #block(width: 60%)[
      #align(left)[
        #grid(
          gutter: 3em,
          [课程名称：#underline(course, offset: 1.6pt)],
          [实验名称：#underline(title, offset: 1.6pt)],
          "完成人：",
          grid(
            gutter: 1.6em,
            ..authors.map(author => align(center)[
              #h(3em) 姓名：#underline(author.name, offset: 1.6pt) 学号：#underline(author.number, offset: 1.6pt)
            ]),
          ),
          [指导教师：#underline(teacher, offset: 1.6pt)],
        )
      ]
    ]
    
    #v(10em)
    日#h(1em)期：#datetime.today().display()
  ]
  
  pagebreak()
  
  par(leading: 1em)[
    #show heading: set block(spacing: 1.1em)
    #body
  ]
}